#include <iostream>

using std::cout;
using std::endl;

//无论什么继承并不会影响当前派生类的权限，基类私有的成员不能访问，其他都可以访问
//但是会影响下一级的权限，就是以当前派生类为新的基类，然后有新的派生类去继承这个类
//public继承，权限不变
//protected继承，private权限不变，其他变为protected权限
//private继承，则全部变为private权限

class Point{
public:
    Point(int x = 0, int y = 0)
        :_ix(x)
         ,_iy(y)
    {

    }

    void print() const {
        cout << "(" << _ix << "," << _iy << ")" << endl;
    }

private:
    int _ix;
protected:
    int _iy;
};

class Point3D
:private Point
{
public:
    Point3D(int x, int y, int z)
        :Point(x, y)
         ,_iz(z)
    {}

    void display() const {
        cout << _ix << endl;//因为在Point中_ix是私有化
                            //所以无论是什么继承都不可以访问
        cout << _iy << endl;
        cout << _iz << endl;
    }

protected:
    //private:
    int _iz;
};

class Point4D
:public Point3D
{
    void show() const {
        cout << _iy << endl;//为什么_iy是protected也不能访问？
                            //因为在上一级继承中，是private继承
                            //所以权限自动变为private，不能访问
        cout << _iz << endl;
    }
};

class Point5D
:private Point4D
{
    void getZ() const {
        cout << _iz << endl;
    }
};

void test(){

}

int main()
{
    test();
    return 0;
}

